;功能：统计data段中数值为8的字节的个数（228页）
;方法：
;   call、ret指令设计子程序
;   cmp、je、jna、jnb指令，条件跳转
;   je指令，统计数值为8的字节，代码不够精炼
;   jna指令，间接统计数值大于8的字节
;   jnb指令，间接统计数值小于8的字节
assume cs:code,ds:data

data segment
    db 8,11,8,1,8,5,63,38
data ends

code segment
start:
    mov ax,data
    mov ds,ax
    xor bx,bx

    ;初始化累加器
    mov ax,0
    mov cx,8

    ;统计数据段“等于8”的数值个数
    ;call cnte8
    ;统计数据段“大于8”的数值个数
    ;call cnta8
    ;统计数据段“大于8”的数值个数
    call cntb8

    mov ax,4c00h
    int 21h

cnte8:
se:  
    ;和8进行比较
    cmp byte ptr [bx],8
    ;zf=1       jmp short cnt跳转并计数
    je cnt
    jmp short nexte
cnt:
    inc ax    
nexte:
    inc bx
    loop se
    ret


cnta8:
sa:
    cmp byte ptr ds:[bx],8
    jna nexta
    inc ax
nexta:    
    inc bx
    loop sa
    ret

cntb8:
sb:
    cmp byte ptr ds:[bx],8
    jnb nextb
    inc ax
nextb:
    inc bx
    loop sb
    ret

code ends
end start